Non-volatile memory systems, such as flash memory, have been widely adopted for use in consumer products. Flash memory is used in numerous applications including mobile phones, digital cameras, MP3 players and many other applications. Flash memory may be found in different forms, for example in the form of a portable memory card that can be carried between host devices or as a solid state disk (SSD). In order to be cost efficient, it is desirable to implement SSD memories using high density Multi-Level Cell (MLC) flash memories rather than Single-Level Cell (SLC) flash memory which has 1-bit per cell storage capacity. Using MLC technology, the memory capacity can be increased by a factor of 3 (for MLC storing 3 bits in each cell) or even by a factor of 4 (for memories storing 4 bits in each cell) as compared to SLC flash without increasing the physical dimensions of the memory. What increases in MLC flash is the amount of data stored in each memory cell and in each physical page (Word Line (WL)) of the memory.
Both the physical properties of MLC memory cells and the manner in which data is stored and read from MLC memory cells can lead to errors when data is read from the different pages of an MLC memory cell. Although there may be instances where an error is due to a state in a flash memory actually flips to another state, the more common type of error occurs when an adjacent state in a flash memory cell is read. Within a particular MLC cell the likelihood of a read error may differ from page to page. Sophisticated and modern error correction codes (ECC) are typically implemented in order to guarantee that the data can be read from flash memory without errors. The stronger the ECC, the more likely that errors can be corrected, however the stronger error correcting codes typically require greater processing power. Flash memories may try to apply different strength ECC codes to different pages of a MLC cell based on a different known likelihood of errors in particular pages of a cell, but this still requires greater overhead and processing delay in reading information from those cells. Also, the parameters used for most effectively addressing errors in flash memory may differ depending on whether the flash memory cells have been programmed in an interleaved or non-interleaved error correction code (ECC) mode. The problem of different BER on different pages in a non-interleaved flash memory system is typically addressed by several methods. One approach is to use different ECC codes for the different pages. This approach involves adding significant complexity for achieving a higher capacity. Other approaches may use the same ECC code for each page but store additional joint parity bits such that low BER pages can help in the decoding of high BER pages, but this sacrifices capacity for simplicity.